package com.example.serviceapplication;

import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    MyBindService.AgencyOfMyService agency;//中间人对象
    public static final String TAG="MainActivity";
    ServiceConnection conn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnBind= (Button) findViewById(R.id.btn_bind);
        Button btnUnBind= (Button) findViewById(R.id.btn_unbind);
        Button btnCall= (Button) findViewById(R.id.btn_call);

        btnCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //调用服务的方法1
                //使用中间人对象，调用服务的方法
                if (agency!=null){
                    Log.i(TAG, "中间人对象工作");
                    agency.work();
                }

            }
        });

        //绑定服务
        btnBind.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //绑定服务
                //目的是获取服务提供给应用的中间人对象
                Intent intent=new Intent(getApplication(),MyBindService.class);
                //绑定
                conn=new MyContract();
                //参数1--intent 参数2-连接（合同），参数3-连接方式
                bindService(intent,conn,BIND_AUTO_CREATE);
                Log.i(TAG, "与服务进行绑定");
            }
        });
        btnUnBind.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.i(TAG, "解除服务绑定");
                if (conn!=null){
                    unbindService(conn);//解除绑定
                    conn=null;
                }
            }
        });



    }
    class MyContract implements ServiceConnection{

        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            //在服务绑定的时候，执行的方法
            //在服务和应用绑定的时候（bindService），会执行服务的onBind方法，会返回一个中间人对象
            //这个中间人对象就是 参数 iBinder
            Log.i(TAG, "绑定服务");
            agency= (MyBindService.AgencyOfMyService) iBinder;
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            //在服务解除绑定的时候，执行的方法

        }
    }

}
